package com.bdbit.ChargingStation.services;

import com.bdbit.ChargingStation.entity.*;

import java.time.LocalDate;
import java.util.List;

public interface ChargingOrderService {

    ChargingOrder createOrder(ChargingOrder order);
    ChargingOrder updateOrder(ChargingOrder order);
    void deleteOrder(Long id);
    ChargingOrder getOrderById(Long id);
    List<ChargingOrder> getAllOrders(String startDate, String endDate);
    List<ChargingOrder> getOrdersByUser(String userId, String startDate, String endDate);
    List<ChargingOrder> getOrdersByStatus(Integer status, String startDate, String endDate);
    // 添加新方法
    void completeOrder(String orderId);
    // 重载completeOrder方法，支持Long类型参数
    void completeOrder(Long orderId);
    // 以下方法保持不变，但会调用带时间筛选的方法
    List<ChargingOrder> getAllOrders();

    List<ChargingOrder> getOrdersByUser(String userId);

    List<ChargingOrder> getOrdersByStatus(Integer status);

    ChargingOrder startCharging(Long orderId);
    ChargingOrder stopCharging(Long orderId);
    ChargingOrder processRefund(Long orderId);
    List<ChargingOrder> getActiveOrders();
    PageResult<ChargingOrder> searchOrders(
            String userId, Integer status, String regionCode, String eleCode,
            String startDateStr, String endDateStr, int page, int size);

    PageResult<ChargingOrder> searchOrders(
            String userId, Integer status, String regionCode, String eleCode,
            LocalDate startDate, LocalDate endDate, int page, int size);

    Integer getOrderstatusbyid(Long id);


    OrderEntity updateOrderStatus2(String orderId, Integer status);

    void save(OrderEntity order);
    
    /**
     * 更新订单的计划充电时长
     * @param orderId 订单ID
     * @param plannedDurationMinutes 计划充电时长（分钟）
     * @return 更新后的订单
     */
    OrderEntity updatePlannedDuration(Long orderId, int plannedDurationMinutes);
    
    /**
     * 根据设备ID（ICCID或eleCode）获取关联的订单ID
     * @param deviceId 设备ID
     * @return 订单ID，如果没有找到则返回null
     */
    String getOrderIdByDevice(String deviceId);
    int UpdateOrderIdByDeviceId(String deviceId);

    /**
     * 获取所有活跃订单的设备ID列表
     * @return 设备ID列表
     */
    List<String> getActiveDeviceIds();
    
    /**
     * 获取设备的最近订单列表
     * @param deviceId 设备ID
     * @param limit 返回数量限制
     * @return 最近订单ID列表
     */
    List<String> getRecentOrdersByDevice(String deviceId, int limit);

    /**
     *更新时间
     * @return 设备ID列表
     */
    int updateDeviceLastTime(String iccid);

    int updateRefundOrder(ChargingOrder order);

    //获取断电的心跳
    List<ChargingOrder> getDieIcc ();

    List<StatisticsByMonth> getOrderStatisticsByMonth(String eleCode, String startDate, String endDate);
    List<StatisticsByDay> getOrderStatisticsByDay(String eleCode, String Date);

}